home *** CD-ROM | disk | FTP | other *** search
/ 10,000 Great Games / 10,000 Great Games.iso / Product / 66 / data1.cab / Source_Files / Src / GameObj.cpp < prev    next >
C/C++ Source or Header  |  2000-01-16  |  3KB  |  141 lines

  1. #include "stdafx.h"
  2.  
  3. cGameObject::cGameObject(cProperties *_orig)
  4.         : cMovable(_orig)
  5. {
  6.     explode = FALSE;
  7.     waypoints = 0;
  8.     editable = 0;
  9.     
  10.     influenced_by_black_hole = orig->params->get_bool("*INFLUENCED_BY_BLACK_HOLE", FALSE);
  11.     influenced_by_catapult = orig->params->get_bool("*INFLUENCED_BY_CATAPULT", FALSE);
  12.     influenced_by_inpenetrable = orig->params->get_bool("*INFLUENCED_BY_INPENETRABLE", FALSE);
  13.  
  14.     fall_through_inpenetrable = orig->params->get_bool("*FALL_THROUGH_INPENETRABLE", TRUE);    
  15.  
  16.     score_value = orig->params->get_int("*SCORE_VALUE", 0);
  17. }
  18.  
  19. cGameObject::~cGameObject()
  20. {
  21.     waypoints->delete_list();
  22. }
  23.  
  24. int cGameObject::control()
  25. {
  26.     cMovable::control();
  27.  
  28.     return !explode;
  29. }
  30.  
  31. int cGameObject::in_water()
  32. {
  33.     if (y < surface->start)
  34.     {
  35.         new cEffect (x, surface->start, orig, "SPLASH", TRUE);
  36.         
  37.         return TRUE;
  38.     }
  39.     
  40.     return FALSE;
  41. }
  42.  
  43. void cGameObject::load(cParse *list)
  44. {
  45.     // Get waypoints
  46.  
  47.     list->get_spots("WAYPOINT", &waypoints);
  48.  
  49.     // Correct waypoints if pasting
  50.  
  51.     int offset = load_y_offset(surface);
  52.  
  53.     if (offset)
  54.         for (cSpot *w = waypoints; w != 0; w = (cSpot *)w->next)
  55.             w->y += offset;
  56. }
  57.  
  58. void cGameObject::save()
  59. {
  60.     ASSERT(orig != 0);
  61.  
  62.     // Write basic information
  63.  
  64.     save_level_string("TYPE", orig->type);
  65.     save_level_string("NAME", orig->name);
  66.     save_level_int("X", x);
  67.     save_level_int("Y", y);
  68.  
  69.     // Write waypoints
  70.  
  71.     for (cSpot *w = waypoints; w != 0; w = (cSpot *)w->next)
  72.         save_level_spot("WAYPOINT", w);    
  73. }
  74.  
  75. void cGameObject::update_list()
  76. {
  77.     // Check if possible lists are known for this object
  78.  
  79.     if (orig == 0 || orig->objtype == 0)
  80.         return;
  81.     
  82.     // Get list that object is currently in
  83.  
  84.     cGameObject **before = (cGameObject **)get_list(), **after;
  85.  
  86.     ASSERT (before != 0);
  87.  
  88.     // Check in which list it should appear
  89.  
  90.     if (above_screen() && (!stay_in_onscreen_list() || end_game))
  91.     {
  92.         // Check if we have to move this object in the abovescreen list
  93.         
  94.         after = orig->objtype->abovescreen;
  95.  
  96.         if (before != after)
  97.             relink((cList **)after);
  98.         
  99.         // Above screen list is sorted on y2
  100.  
  101.         sort_y2();
  102.     }
  103.     else if (below_screen())
  104.     {
  105.         // Check if we have to move this object in the belowscreen list
  106.         
  107.         after = orig->objtype->belowscreen;
  108.  
  109.         if (before != after)
  110.             relink((cList **)after);
  111.  
  112.         // Below screen list is reversely sorted on y1        
  113.         
  114.         rsort_y1();
  115.     }
  116.     else
  117.     {
  118.         // Check if we have to move this object in the onscreen list
  119.  
  120.         after = orig->objtype->onscreen;
  121.  
  122.         if (before != after)
  123.             relink((cList **)after);
  124.     }    
  125. }
  126.  
  127. void cGameObject::create_editables(int select)
  128. {
  129.     new cEditableGameObject(this, select);
  130. }
  131.  
  132. void cGameObject::make_trail()
  133. {
  134.     if (!low_detail_level && !made_trail)
  135.     {
  136.         new cEffect (x, y, orig, "TRAIL");
  137.  
  138.         made_trail = orig->sequence_exists("TRAIL")? sec / 10 + rnd(sec / 4) : NEVER;
  139.     }
  140. }
  141.